<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>获取亲密数</title>
    <script>
      /*a的所有正因子和等于b，b的所有正因子和等于a，
       *因子包括1但不包括本身，且a不等于b，则称a，b为亲密数对
       */
      //获取除本身之外的其余约数和
      function getFactorialNumExcludeSelf(num) {
        if (num === 1 || num === 2) return 1;
        var sum = 0; //本身之外的其余约数和
        var i = 1; //初始化
        //除本身外，约数<= 本身/2，parseInt(num / 2) 取输入数一半，减少循环计算，
        while (i <= parseInt(num / 2)) {
          if (num % i === 0) {
            sum += i;
          }
          i++;
        }
        return sum;
      }
      //求2000 以内亲密数
      function getFriendlyNum() {
        var i = 1;
        while (i <= 2000) {
          var sum1 = getFactorialNumExcludeSelf(i); //a的所有正因子和(除a)
          var sum2 = getFactorialNumExcludeSelf(sum1); //b的所有正因子和(除b)
          //且A!==B, 使用A<B, 去除重复的亲密数对
          if (i === sum2 && i < sum1) {
            console.log(i, sum1, "是一对亲密数"); //220&184, 1184&1210共两对
          }
          i++;
        }
      }
      //   getFactorialNumExcludeSelf(10);
      getFriendlyNum();
    </script>
  </head>
  <body></body>
</html>
